package educar.gui.admin;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

import educar.controllers.AddUserController;
import educar.controllers.IController;
import educar.controllers.WindowDispose;
import educar.gui.IView;
import educar.idioma.Locale;
import educar.listeners.ButtonListener;

import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;

import javax.swing.JRadioButton;
import javax.swing.border.TitledBorder;
import javax.swing.UIManager;
import javax.swing.SwingConstants;

public class AddUser implements IView {
	/*Ventana principal*/
	private JFrame jfWindow;
	/*campo nombre usuario*/
	private JTextField tfUsername;
	/*campo nombre password*/
	private JTextField pfPassword;
	/*bonton radio admin*/
	private JRadioButton rdbtnAdmin;
	/*bonton radio teacher*/
	private JRadioButton rdbtnTeacher;
	/*bonton radio student*/
	private JRadioButton rdbtnStudent;
	/*rol del usuario*/
	private String role = "admin";
	
	
	/**
	 * Constructor de la Clase
	 * Crea la ventana que permite definir un
	 * nuevo usuario y lo almacena en la variable user
	 * luego se podra obtener atraves de un getUser
	 */
	public AddUser() {
		/*configuro y creo la ventana*/
		jfWindow = new JFrame();		
		jfWindow.setIconImage(Toolkit.getDefaultToolkit().getImage(IView.class.getResource("/educar/media/educar-icon2.png")));
		/*Segun la dimension de la pantalla (resolucion) Centro la ventana*/
		Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
		Point framePos=new Point((int)(screenSize.width)/2-200,(int)(screenSize.height)/2-150);
		jfWindow.setLocation(framePos);
		/*Renombro la ventana*/
		jfWindow.setTitle(Locale.ADD+" "+Locale.USERS);
		/*obtengo el panel contenedor y lo configuro*/
		Container container = jfWindow.getContentPane();
		setupMainContainer(container);	
		/*configura otras caracteristicas*/
		jfWindow.pack();
		jfWindow.setVisible(true);
		jfWindow.setResizable(false);
		jfWindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);		
}

	/**
	 * Configura el contenedor de la ventana
	 * */
	private void setupMainContainer(Container container) {
		/*Configura el estilo del contenedor y le agrega un borde en blanco*/
		container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
		((JComponent) container).setBorder(new EmptyBorder(10, 10, 10, 10));
		
		/*Agrega un texto*/
		JLabel lblWelcome = new JLabel(Locale.ADD+" "+Locale.USERS);
		lblWelcome.setAlignmentX(Component.CENTER_ALIGNMENT);
		lblWelcome.setFont(new Font("Serif", Font.BOLD, 16));
		lblWelcome.setBorder(new EmptyBorder(0, 10, 10, 10));
		container.add(lblWelcome);

		/*Agrega la casilla de nombre de usuario*/
		JLabel lblUserName = new JLabel(Locale.USER_NAME+" : ");
		lblUserName.setHorizontalAlignment(SwingConstants.RIGHT);
		tfUsername = new JTextField(20);
		JPanel usernamePane = new JPanel();
		usernamePane.setLayout(new BorderLayout(0, 0));
		usernamePane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
		usernamePane.add(lblUserName,BorderLayout.CENTER);
		usernamePane.add(tfUsername,BorderLayout.LINE_END);
		container.add(usernamePane);

		/*Agrega la casilla de password de usuario*/
		JLabel lblPassword = new JLabel(Locale.PASSWORD+" : ");
		lblPassword.setHorizontalAlignment(SwingConstants.RIGHT);
		pfPassword = new JTextField(20);
		JPanel passwordPane = new JPanel();
		passwordPane.setLayout(new BorderLayout(0, 0));
		passwordPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
		passwordPane.add(lblPassword,BorderLayout.CENTER);
		passwordPane.add(pfPassword,BorderLayout.LINE_END);
		container.add(passwordPane, BorderLayout.PAGE_END);
		
		/*Crea un panel que contiene los botones*/
		JPanel buttonsPane = new JPanel();
		buttonsPane.setLayout(new BoxLayout(buttonsPane, BoxLayout.LINE_AXIS));
		
		/*Creo el Boton Agregar*/
		JButton bAdd = new JButton(Locale.ADD);
		bAdd.setAlignmentX(Component.LEFT_ALIGNMENT);	
		ButtonListener buttonListener = new ButtonListener();
		IController addusercontroller = new AddUserController();
		addusercontroller.setView(this);
		buttonListener.associate(bAdd, addusercontroller);		
		/*Creo el Boton Cerrar*/
		JButton bExit = new JButton(Locale.CLOSE);
		ButtonListener closeListener = new ButtonListener();
		IController closeController = new WindowDispose();
		closeController.setView(this);
		closeListener.associate(bExit, closeController);	
		
		
		bExit.setAlignmentX(Component.RIGHT_ALIGNMENT);
		
		/*Creo un panel que contiene los radio buttons*/
		JPanel panel = new JPanel();
		panel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Role", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		container.add(panel);
		/**
		 * Creo los radio buttons
		 */		
		/*Boton Admin*/
		rdbtnAdmin = new JRadioButton(Locale.ADMIN);
		rdbtnAdmin.setSelected(true);
		rdbtnAdmin.setActionCommand("admin");
		rdbtnAdmin.addActionListener(new ActionListener () {public void actionPerformed(ActionEvent e){role = "admin";}});
		panel.add(rdbtnAdmin);		
		/*Boton Teacher*/
		rdbtnTeacher = new JRadioButton(Locale.TEACHER);
		rdbtnTeacher.setActionCommand("teacher");
		rdbtnTeacher.addActionListener(new ActionListener () {public void actionPerformed(ActionEvent e){role = "teacher";}});
		panel.add(rdbtnTeacher);		
		/*Boton Student*/
		rdbtnStudent = new JRadioButton(Locale.STUDENT);
		rdbtnStudent.setActionCommand("student");
		rdbtnStudent.addActionListener(new ActionListener () {public void actionPerformed(ActionEvent e){role = "student";}});
		panel.add(rdbtnStudent);	
		
		/*Agrupo los botones para que sean excluyentes*/
	    ButtonGroup group = new ButtonGroup();
	    group.add(rdbtnAdmin);
	    group.add(rdbtnTeacher);
	    group.add(rdbtnStudent);
		
		/*Agrego los Botones Guardar-Salir*/
		buttonsPane.add(bAdd);
		/*Un separador entre los botones*/
		Component verticalStrut = Box.createVerticalStrut(20);
		verticalStrut.setMaximumSize(new Dimension(10, 20));
		buttonsPane.add(verticalStrut);
		buttonsPane.add(bExit);
		/*agrego el panel de botones al final del cuadro principal*/
		container.add(buttonsPane, BorderLayout.PAGE_END);				
	}

	/**
	 * Funcion que devuelve el nombre del usuario creado
	 * @return "string que contiene el nombre"
	 */
	public String getUsername() {
		return tfUsername.getText().trim();
	}
	
	/**
	 * Funcion que setea el nombre anterior del usuario
	 * @param oldName "nombre anterior del usuario"
	 */
	public void setUsername(String oldName) {
		tfUsername.setText(oldName);
	}

	/**
	 * Funcion que devuelve el passworde del usuario creado
	 * @return "string que contiene el password"
	 */
	public String getPassword() {
		return pfPassword.getText().trim();
	}
	
	/**
	 * Funcion que setea el password anterior del usuario
	 * @param oldPass "password anterior del usuario"
	 */
	public void setPassword(String oldPass) {
		pfPassword.setText(oldPass);
	}
	
	/**
	 * Establece el rol del usuario a editar
	 * @param rol "rol nuevo 'amdin' 'student' 'teacher' "
	 */
	public void setRole(String rol) {
		role = rol;
	}
	
	/**
	 * Devuelve el rol del usuario a editar
	 * @return "rol del usuario a crear 'amdin' 'student' 'teacher'"
	 */
	public String getRole() {
		return role;
	}
	
	/**
	 * Al crear la ventana si el usuario es admin
	 * evito cambiar el nombre y el rol
	 */
	public void setAdmin() {
		tfUsername.setEditable(false);
		rdbtnTeacher.setEnabled(false);
		rdbtnStudent.setEnabled(false);
		role = "admin";
	}
	
	
	/**
	 * Inicio la ventana como Student
	 */
	public void setStudent() {
		rdbtnAdmin.setEnabled(false);
		rdbtnTeacher.setEnabled(false);
		rdbtnStudent.setEnabled(true);
		rdbtnStudent.setSelected(true);
		role = "student";
	}
	
	/**
	 * Sirve para abrir una ventana con texto
	 * @param model "texto a mostrar"
	 */
	public void present(String model) {
		JOptionPane.showMessageDialog(null, model," " + Locale.MESSAGE,1);
	}
	
	/**
	 * Sirve para abrir un carte de warning
	 * @param msg "String texto del mensaje"
	 * @param title "String titulo de la ventana"
	 */
	public void presentWarning(String msg,String title) {
		JOptionPane.showMessageDialog(null,msg,title,JOptionPane.WARNING_MESSAGE);
	}

	/**
	 * Cierra la ventana actual sin salir del programa
	 */
	public void close(){
		jfWindow.dispose();
	}

	/**
	 * Permite Agregar un listener a la ventana
	 * @param windowAdapter
	 */
	public void addWindowListener(WindowAdapter windowAdapter) {
		jfWindow.addWindowListener(windowAdapter);
		
	}

}